문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 흉악 캐릭터 (문단 편집) === 무겐의 코드에 추가적인 프로그램 관련 지식을 첨가한 공격 기술 === 무겐 자체에 내장된 코드를 쓰되, 추가적인 프로그램 관련 지식이 필요한 공격 기술이다. 기본적으로 16진수 HEX 코드 관련 지식이 주를 이룬다. 이러한 공격 기술은 일반 캐릭터와는 동떨어진 것이기에, 일반 캐릭터를 제작하는 제작자는 추가적인 내용을 배우지 않는 이상은 다음의 기술을 사용하는데 난항을 겪을 수 있다. 그렇기 때문에 해당 기술은 일반 무겐과는 꽤나 동떨어진 기술이다. 더불어, 무겐 자체에 내장된 코드가 아닌, 무겐 외적인 요소를 사용하기 때문에, 무겐이 강제 종료된다거나 하는 부작용이 발생할 수 있다. 이러한 부작용은 다음과 같은 세 가지 상황에서 빈번하게 발생한다: (1) 코드를 잘못 "설계"할 경우. hitpausetime이 안 들어간 상태에서 초즉사 등에 돌입하면 무겐이 강제 종료된다. (2) 코드를 잘못 "입력"할 경우. 556 개의 null이 필요한 상황에서 개수를 잘못 셀 경우, 잘못된 값을 건드려서 무겐이 강제 종료될 수 있다. (3) 과도하게 사용할 경우. 올바른 코드라도 반복해서 사용하다 보면 값을 잘못 건드리는 경우가 있는데, 이 경우 무겐이 강제 종료된다. * 초즉사 강제로 오버플로를 일으켜서 정상적인 상황에서는 건드리지 못하는 값을 건드리는 코드. 무겐에서는 hitpausetime과 ignorehitpause라는 기능이 있는데, 이 기능들은 스테이트 컨트롤러(약칭 스테컨) 하나마다 대응되며, 총 512개의 공간이 있다. 그래서 스테컨은 일반적으로 최대 512개만을 작동시킬 수 있다. 하지만 hitpausetime이 0보다 큰 경우에는, 512개가 넘는 스테컨이 작동가능한데, 하필이면 일반적인 ignorehitpause 수용 공간을 넘는 553~556번째[*윈무겐기준 1.0 이상 무겐에서는 557~560.]공간에 캐릭터의 alive 값이 존재하여, 이를 건드리면 체력이 풀피여도 상대방은 죽어있게 된다. 이러한 초즉사는 주로 두가지 방법이 존재하는데, 첫번째는 "반격", 두번째는 "잡기" 방식이다. 그런데 반격의 경우에는 --언제 공격할지 모르는 적을 하염없이 기다릴 순 없기에-- 잘 사용되지 않고, 주로 상대의 의지와 관련없이 초즉사를 작동시킬 수 있는 "잡기" 방식을 주로 사용한다. 초즉사 반격의 경우엔 다음과 같은 순서로 발동한다: (1) 초즉사 스테이트를 준비한다. 하나의 Statedef에 스테컨 556개[*1.0이상은 557~560개]가 있으면 되고, 553~556번째[*윈무겐기준] 스테컨에 ignorehitpause=1이 되어있다면 준비 완료. 여러 개의 State 중에서 ignorehitpause=1이 있는 것은 해당 코드를 조작하게 되고, 이게 없는 것은 아무런 효력을 발휘하지 않는다 (나머지는 자리 채우기 용도). 마지막에는 초즉사 스테이트에서 나갈 수 있는 ChangeState 또는 SelfState가 있으면 좋다. (2) 값을 조작하고 싶은 대상의 공격을 반격해서 hitpausetime을 주고, 자신의 초즉사 스테이트로 이동시킨다.[* 이때, hitpausetime이 없으면 오버 플로우 상황에서 무겐이 강제 종료된다.] (3) 이렇게 되면 상대는 Alive 값이 0이 되며 사망한다. 초즉사 잡기의 경우엔 다음과 같은 순서로 발동한다: (1) 초즉사 스테이트를 준비한다. (2) '''초즉사 직전 스테이트'''를 준비한다. HitDef에서는, 상대방에게 hitpausetime을 줄 수 없다. 그러므로 상대방이 강제로 Reversaldef이나, 상대 측에서의 HitDef 등을 이용해 hitpausetime을 줄 필요가 있는 것이다. 그러므로 초즉사 직전 스테이트에는 affectteam=f인 hitdef와[* 자신의 팀에게만 맞게 한다. 상대 기준으로도 물론이고], 피격용 헬퍼를 준비한다. (3) 값을 조작하고 싶은 대상을 공격해서 자신의 '''초즉사 직전 스테이트'''로 이동시킨다. (4) 이렇게 되면 상대는 자신의 피격용 헬퍼를 치게되며 hitpausetime을 얻게 되고, 초즉사 스테이트로 끌려가 사망하게 된다. 추가적으로, persistent라는 기능을 이용해서 값을 줄이는 것 뿐만 아니라 자유자재로 조작할 수 있다! * 사실 위에 있는 초즉사는, 활용성이 무궁무진하다. 상대의 Alive 뿐만 아니라, PalNo 다운[* 팔레트에 따라 성능이 바뀌는 캐릭터의 팔레트를 강제로 바꾼다.] (1993~1996), Parent 변경[* 혼선버그보다 더 강력하게 상대 헬퍼의 변수에 간섭할 수 있다. 이하 후술] (6689~6692), Parent 날조[* 부모의 변수가 아닌, 부모의 Alive 등에 간섭하는 기술. 이하 후술] (6693~6696) 등이 전부 초즉사 응용이다! * 직사 '곧을 직 (直)'자를 써서 '직사'라고 한다. 기존의 초즉사로는 Alive값을 조작할 수는 있지만, 자신의 Alive값만을 조작할 수 있기에 상대를 자신의 스테이트로 끌어올 필요가 있었다. 때문에 많은 제작자들이 자신이 아닌 "상대의" Alive값을 조작해 보려는 시도를 하였으나, 자신의 Alive값을 관장하는 주소는 항상 고정되어있는 반면 상대의 Alive값을 관장하는 주소는 무겐 시작시마다 변하기 때문에 이를 조작하기란 쉽지 않았다. 그래서 나온 의견이 바로 이것이다: '''[[브루트 포스|그냥 모든 값에 죄다 간섭해 버리면 그 중에서 상대의 Alive값도 있겠지.]]''' 이것이 바로 직사 코드이다. 하지만 그렇게까지 막무가내인 방법은 아니고, 이는 무겐의 데이터 로딩 방식을 이용한 것이다. 무겐은 일정 칸마다 캐릭터가 할당된다. 그러므로 일정 칸(Windows 10, 64비트 기준 약 13832칸)+556(Alive 위치) 을 수정하게 되면 상대를 잡을 확률이 높다. 직사는 이러한 행동을 헬퍼까지 소환해가며 반복한다. 하지만 여전히 주먹구구식의 방법이기 때문에 다음과 같은 두 가지 문제점이 있다: (1) 무겐이 빈번하게 강제 종료된다. (2) 윈도우 XP가 (당시에 사용되던 운영 체제) 아닌 환경에서는 잘 작동하지 않을 수 있다. * Parent 변경 Helper의 Parent를 강제로 변경하는 코드. 응용의 범위가 매우 크다. 통상적으로 상대의 헬퍼에 간섭하는 방법은 상술한 혼선버그를 응용하는 것이다. 하지만 몇몇 경우에는 타겟이 해제될 때도 있다. 그렇기 때문에 혼선버그를 사용했을 때는 작동하지 않는 Parent 관련 기능을 사용할 수 있게 하는 방법이다. 다음과 같은 순서로 발동한다: (1) Helper 소환. 이를 부모 헬퍼라고 부르자. (2) 부모 헬퍼에서 Helper 소환. 이를 자식 헬퍼라고 부르자. (3) 부모 헬퍼가 스스로 소멸. (3) 상대가 Helper를 소환하면, Null 스테이트가 6692개 존재하는 스테이트로 들어가서, 자신의 Parent id를 강제로 맞춰버린다.[* 방금 서술한 Parent id와 parent,id는 별개로, Parent id는 parent 관련 기능을 사용할 때 체크하는 부분이다. parent, id와 맞지 않으면 작동하지 않으므로, 이를 강제로 맞춰버리는 것.] 이때 parent,var(0) 등으로 상대의 정보를 보거나, Parent 날조 등을 사용해서 상대 Helper를 강제 조작. * %n 버그 DisplayToClipboard[* 또는 AppendToClipboard.] 명령어의 %n 서식 문자를 활용한다. %n은 지금까지 클립보드에 입력한 문자의 수를 특정 값에 저장하는 기능이다. %n 버그는 이 기능을 통해 무겐의 특정 주소에 있는 값에 간섭하는 기술을 말한다. 하지만 이 기능은 기본적으로 값을 쓰는것만 가능하며 고정된 주소의 값만 건드리기 때문에, 대부분의 값이 포인터 형식으로 이루어진 무겐에서는 그냥 (항상 고정된 주소값을 가지는) 디버그 키만 쓰거나 혹은 후술할 Parent 날조, %f과 같은 방식으로 응용하기도 한다. 대표적으로 F1키를 강제로 누르게 하는 것, Esc 키를 강제로 누르게 하는 것 (로딩화면으로 돌아가기) 등이 있는데, 가장 자주 자용되는 건 상대 플레이어 OFF 기능이다.[* Ctrl + Alt + (해당 플레이어 번호)] 상대 플레이어를 지우고 후술할 Parent 날조를 사용해서 게임을 끝낼 수 있다. * Parent 날조 위의 "초즉사"를 응용하되, 다른 값이 아니라 Parent값을 강제 조작한다. 이 코드의 묘미는 Parent값을 상대나 상대의 Helper가 아니라, "아무 것도 없는 무의 공간"에 지정해 버릴 수 있다는 점이다. 일반적으로 Parent가 상대라면 parent,alive 값은 상대의 생존 유무가 될 것이나, Parent를 상대 플레이어보다 정확히 0x100칸 앞에 지정해 버리면 parent,var(57) 값이 상대의 alive 값에 대응하게 된다. 이 상태에서 ParentVarSet을 사용하면 게임 끝. 이것이 바로 Parent 날조 직사이다. 말이 직사이지, 기본적인 직사보다 훨씬 안정적이다. 추가적으로, Parent 날조를 이용한 플레이어 삭제가 있는데, 이 기술은 무겐의 데이터 포인터를 추출해와 무겐 자체의 변수에 간섭해 상대를 삭제하는 기술이다. 자세한건 %n Parent 날조의 2번부터를 확인할 것. 그리고, %n을 이용한 Parent 날조 방식이 있는데, 기존 Parent 날조 플레이어 삭제와 방식은 같지만, 훨씬 간단하고 빠른 방식이다. 사용 과정은 다음과 같다: (1) %n을 이용하여 게임에 버그를 일으킨다. '''이를 이용해서 바로 초즉사 스테이트로 들어가서 Parent 값을 수정할 수 있다.''' (2) Parent 날조를 이용해 무겐의 메인 포인터를 가져온다. 무겐의 메인 포인터에는 무겐의 중요한 값들이 거의 다 존재하기 때문. (3) 얻어온 값을 이용해 상대를 상제하고 자신이 강제로 승리한다. 이 외에도 무겐의 중요 포인터를 가져왔으니, 훨씬 많은 기능을 수행할 수 있다. * %f 버그 '''논외급 캐릭터들은 왠만하면 사용할 정도로 강력한 코드.''' 상술한 %n 코드의 개선판으로써, 아예 어셈블리 코드 자체를 실행시킬 수 있다. 방법은 --의외로-- 간단하다: (1) 고정된 주소에 있는 함수 포인터를 강제로 수정한다. 자신이 만든 어셈블리 코드를 읽게 해줄 기능이 필요한데, 이 함수 포인터가 그 기능을 수행하는 것. (2) 아까 수정한 값의 위치에 %n으로 어셈블리 코드를 쓴다. (3) DTC로 %f, Pos X 를 실행하면 자동으로 어셈블리 코드가 읽힌다. 주로 사용하는 방식은 상대의 코드를 '''반영구적으로 날려버리는''' 루트 딜리터가 있고, 이 외에도 여러 기능을 수행할 수 있다. 일단 이 위에서 %n Parent 날조까지 써가며 썼던 공격들을 쉽게 실행할 수 있고, 캐릭터의 이름 수정[* 여담으로 윈무겐 전용 캐릭터 중에는 신급도 아니고 흉악 코드를 사용하지도 않지만 이걸로 게임 도중 이름 변경이 되는 캐릭터가 극히 드물게도 있다.]과, 시간 조작, 상대캐 직접 조작, RoundState 조작, 심지어는 윈도우 API와 DLL 까지 실행시킬 수 있다. * %v%v 버그저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기